perm filename WRD.FAI[SS,SYS] blob
sn#527525 filedate 1980-08-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 F A B C D E U W X Y Z P DK INFPRV LENTRY PTWORD PINF LINF NBUFS LPDL PDL DARBLK INFBLK IBUF WRD0 WRD UFDLOP NXTUFD GOTUFD NODISK NODAR NOMFD SIXSML SIXOUT REDPPN REDLOP REDPRG REDADJ CPOPJ GETW2 GETWD NOSUCH PPNOUT ARGHH
C00009 ENDMK
C⊗;
;F A B C D E U W X Y Z P DK INFPRV LENTRY PTWORD PINF LINF NBUFS LPDL PDL DARBLK INFBLK IBUF WRD0 WRD UFDLOP NXTUFD GOTUFD NODISK NODAR NOMFD SIXSML SIXOUT REDPPN REDLOP REDPRG REDADJ CPOPJ GETW2 GETWD NOSUCH PPNOUT ARGHH
TITLE WRD Program to let a wizard find out a user's password.
F←0
A←1
B←2
C←3
D←4
E←5
U←12 ;User PPN
W←13 ;Lookup block
X←14
Y←15
Z←16
P←17
DK←←1 ;Disk I/O channel
INFPRV←←20 ;Priv needed
LENTRY←←20 ;Length of UFD entry
PTWORD←←3 ;Word in entry that has the disk pointer
PINF←←13 ;Loc of password in retrieval
LINF←←PINF+1 ;Amount of retr to read
NBUFS←←=19 ;Number of disk input buffers
LPDL←←30
PDL: BLOCK LPDL
DARBLK: 'GODMOD'
1 ;Disk absolute read
IOWD LINF,INFBLK ;Amount to read
0 ;Disk address stuffed here
INFBLK: BLOCK LINF ;Block for data from file
IBUF: BLOCK 3 ;Input buffer header for reading MFD
WRD0: OUTSTR [ASCIZ/
/]
WRD: RESET
MOVE P,[IOWD LPDL,PDL]
MOVSI A,INFPRV ;Enable needed priv
SETPRV A,
TLNN A,INFPRV ;Get it?
EXIT
OUTSTR [ASCIZ/User: /]
PUSHJ P,REDPPN ;Read PPN into U
JRST WRD0 ;Bad form, try again
INIT DK,210 ;No bad retr errors, wd mode
'DSK '
IBUF
JRST NODISK
INBUF DK,NBUFS ;Get input buffers
MOVE Z,[[' 1 1' ↔ 'UFD ' ↔ 0 ↔ ' 1 1'],,W]
BLT Z,Z ;Get filename of MFD into W thru Z
LOOKUP DK,W ;Open MFD
JRST NOMFD ;Failed!
UFDLOP: MOVEI D,LENTRY ;Number of words in a UFD entry
PUSHJ P,GETWD ;Get first word
CAME A,U ;Is this the UFD we want?
JRST NXTUFD
PUSHJ P,GETWD
HLRZ A,A
CAIN A,'UFD' ;Really a UFD?
JRST GOTUFD ;Yes
NXTUFD: PUSHJ P,GETWD
JUMPG D,.-1 ;Jump if more words in the UFD
JRST UFDLOP ;Check next entry in MFD
GOTUFD: PUSHJ P,GETWD
CAIE D,LENTRY-PTWORD-1 ;Is this the pointer entry?
JUMPG D,GOTUFD
JUMPLE D,ARGHH ;Can't happen
MOVEM A,DARBLK+3 ;Store disk address for read
MTAPE DK,DARBLK
JRST NODAR ;Failed?
RELEAS DK,
HRROI A,[4000,,"H"] ;ESC H to hide
TTYSET A,
OUTSTR [ASCIZ/The /]
PUSHJ P,PPNOUT
OUTSTR [ASCIZ/ word is /]
MOVE A,INFBLK+PINF ;Get password
SETZM INFBLK+PINF ;For good measure
PUSHJ P,SIXSML
OUTCHR ["."]
EXIT
NODISK: OUTSTR [ASCIZ/??Can't INIT the DSK./]
EXIT
NODAR: OUTSTR [ASCIZ/??PSW read failed./]
EXIT
NOMFD: OUTSTR [ASCIZ/??Can't LOOKUP MFD./]
EXIT
SIXSML: JUMPE A,CPOPJ
MOVEI B,0
ROTC A,6
JUMPE B,SIXSML ;Suppress spaces
CAIL B,'A'
CAILE B,'Z'
SUBI B,40
ADDI B,100 ;Lower case for letters
OUTCHR B
JRST SIXSML
REPEAT 0,<
SIXOUT: JUMPE A,CPOPJ
MOVEI B,0
ROTC A,6
ADDI B,40 ;Make into ASCII
OUTCHR B
JRST SIXOUT
>;REPEAT 0
REDPPN: MOVEI U,0 ;Collect PPN in U
MOVE A,[POINT 6,U] ;Byte ptr for collection
MOVEI B,3 ;Max chars in project
REDLOP: INCHWL C ;Get a char
TRZE C,600 ;Bucky bits are illegal
POPJ P, ;Bad form
CAIE C,"[" ;Ignore brackets
CAIN C,"]"
JRST REDLOP
CAIN C,15 ;Ignore CR
JRST REDLOP
CAIN C,12 ;LF ends it
JRST REDADJ ;Justify and return
CAIN C,","
JRST REDPRG ;Get programmer now
SOJL B,REDLOP ;Any more chars allowed?
TRZ C,40 ;Convert to sixbit
TRZE C,100
TRO C,40 ;Now it's sixbit
IDPB C,A ;Store sixbit char
JRST REDLOP
REDPRG: MOVE A,[POINT 6,U,17] ;Store into right half
MOVEI B,3
JRST REDLOP
REDADJ: HLLZ A,U ;Get project
SKIPN A ;Skip if any given
DSKPPN A, ;Get alias PPN
CAIA
LSH A,-6 ;Right justify half word
TLNN A,77
JRST .-2
HLL U,A
HRRZ A,U ;Get programmer
SKIPN A ;Skip if any given
DSKPPN A, ;Get alias PPN
CAIA
LSH A,-6 ;Right justify half word
TRNN A,77
JRST .-2
HRR U,A
AOS (P)
CPOPJ: POPJ P,
GETW2: ILDB A,IBUF+1 ;Get next word
SUBI D,1 ;Count another word of UFD entry seen
POPJ P,
GETWD: SOSG IBUF+2 ;Next word from buffer
IN DK, ;Next buffer
JRST GETW2 ;OK
STATO DK,20000
OUTSTR [ASCIZ/??Error reading MFD.
/]
STATZ DK,20000
PUSHJ P,NOSUCH ;Tell user PPN not found
RELEAS DK,
EXIT
NOSUCH: OUTSTR [ASCIZ/No user /]
PUSHJ P,PPNOUT
OUTCHR ["."]
POPJ P,
PPNOUT: HLLZ A,U ;Get project
PUSHJ P,SIXSML
OUTCHR [","]
HRRZ A,U ;Programmer
JRST SIXSML
ARGHH: OUTSTR [ASCIZ/??The Impossible error has struck!/]
RELEAS DK,
EXIT
END WRD